]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
workspacesView: Allow activating empty workspaces on any monitor
authorFlorian Müllner <fmuellner@gnome.org>
Fri, 24 Jun 2016 16:15:48 +0000 (18:15 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Mon, 27 Jun 2016 14:31:00 +0000 (16:31 +0200)
We allow activating a workspace by clicking it when we know that
the user did not try to select a window and missed (namely: the
workspace is empty). However we currently always check for an
empty workspace on the primary monitor, which doesn't make sense
when the click happened on a different monitor.

https://bugzilla.gnome.org/show_bug.cgi?id=766883

js/ui/workspacesView.js

index e5166615ce7a8dbfa0eb181eeee578cf523e9a55..aaa9522fd7cbbcb56855936278f53ecb8be5e7a8 100644 (file)
@@ -374,6 +374,10 @@ const ExtraWorkspaceView = new Lang.Class({
         this._workspace.setActualGeometry(this._actualGeometry);
     },
 
+    getActiveWorkspace: function() {
+        return this._workspace;
+    },
+
     animateToOverview: function(animationType) {
         if (animationType == AnimationType.ZOOM)
             this._workspace.zoomToOverview();
@@ -421,8 +425,10 @@ const WorkspacesDisplay = new Lang.Class({
             // Only switch to the workspace when there's no application
             // windows open. The problem is that it's too easy to miss
             // an app window and get the wrong one focused.
+            let event = Clutter.get_current_event();
+            let index = this._getMonitorIndexForEvent(event);
             if ((action.get_button() == 1 || action.get_button() == 0) &&
-                this._getPrimaryView().getActiveWorkspace().isEmpty())
+                this._workspacesViews[index].getActiveWorkspace().isEmpty())
                 Main.overview.hide();
         }));
         Main.overview.addAction(clickAction);
@@ -582,6 +588,12 @@ const WorkspacesDisplay = new Lang.Class({
         }
     },
 
+    _getMonitorIndexForEvent: function(event) {
+        let [x, y] = event.get_coords();
+        let rect = new Meta.Rectangle({ x: x, y: y, width: 1, height: 1 });
+        return global.screen.get_monitor_index_for_rect(rect);
+    },
+
     _getPrimaryView: function() {
         if (!this._workspacesViews.length)
             return null;